home *** CD-ROM | disk | FTP | other *** search
/ Cream of the Crop 1 / Cream of the Crop 1.iso / EDUCATE / PC_STRAN.ARJ / DOMEMESH.BAS < prev    next >
BASIC Source File  |  1988-12-22  |  4KB  |  131 lines

  1. 10 REM basic program to generate dome.msh
  2. 20 DIM X(36),Y(36),Z(36)
  3. 30 REM FNASN(X) is arcsin function of X, X not equal to 1
  4. 40 DEF FNASN(X) = ATN(X/SQR(1-X*X))
  5. 50 REM FNACS(X) is arccos function of X, X not equal to 1
  6. 60 DEF FNACS(X) = PI#/2-FNASN(X)
  7. 70 PI# = 3.141592653#
  8. 80 REM data statements used to describe member connectivity
  9. 90 DATA  1, 2, 3, 4, 5, 6, 7, 8, 9,10, 1,0
  10. 100 DATA 11,12,13,14,15,16,17,18,19,20,11,0
  11. 110 DATA 21,22,23,24,25,26,27,28,29,30,21,0
  12. 120 DATA 31,32,33,34,35,31,0
  13. 130 DATA  1,11,21,31,36,0
  14. 140 DATA  2,12,22,32,0
  15. 150 DATA  3,13,23,32,36,0
  16. 160 DATA  4,14,24,33,0
  17. 170 DATA  5,15,25,33,36,0
  18. 180 DATA  6,16,26,34,0
  19. 190 DATA  7,17,27,34,36,0
  20. 200 DATA  8,18,28,35,0
  21. 210 DATA  9,19,29,35,36,0
  22. 220 DATA 10,20,30,31,0
  23. 230 DATA  1,20,29,0
  24. 240 DATA  2,11,30,35,0
  25. 250 DATA  3,12,21,0
  26. 260 DATA  4,13,22,31,0
  27. 270 DATA  5,14,23,0
  28. 280 DATA  6,15,24,32,0
  29. 290 DATA  7,16,25,0
  30. 300 DATA  8,17,26,33,0
  31. 310 DATA  9,18,27,0
  32. 320 DATA 10,19,28,34,0
  33. 330 DATA 0
  34. 340 REM THETAO or TH is latitude angle, PH is longitude angle
  35. 350 REM THETAO = PI#/2 - 2 * FNASN(1.051462/2)
  36. 360 REM icosahedron arc angle is 63° 26' 05.808"
  37. 370 ICOSA# = (63# + (26# + 5.808#/60)/60)/180*PI#
  38. 380 REM R is circumscribed dome radius in inches
  39. 390 R = 120
  40. 400 TH = -(PI#/2 - ICOSA#)
  41. 410 FOR I =  1 TO 9 STEP 2
  42. 420     PH = (-36 +(I- 1)*36) * PI#/180
  43. 430     X(I) = R * COS(TH) * SIN(PH)
  44. 440     Y(I) = R * SIN(TH)
  45. 450     Z(I) = R * COS(TH) * COS(PH)
  46. 460 NEXT
  47. 470 FOR I =  2 TO 8 STEP 2
  48. 480     J = I+1 : GOSUB 1220
  49. 490 NEXT
  50. 500 I = 10 : J = 1 : GOSUB 1220
  51. 510 TH = 0
  52. 520 FOR I = 11 TO 20
  53. 530     PH = (-18 +(I-11)*36) * PI#/180
  54. 540     X(I) = R * COS(TH) * SIN(PH)
  55. 550     Y(I) = R * SIN(TH)
  56. 560     Z(I) = R * COS(TH) * COS(PH)
  57. 570 NEXT
  58. 580 TH = +(PI#/2 - ICOSA#)
  59. 590 FOR I = 21 TO 29 STEP 2
  60. 600     PH = (  0 +(I-21)*36) * PI#/180
  61. 610     X(I) = R * COS(TH) * SIN(PH)
  62. 620     Y(I) = R * SIN(TH)
  63. 630     Z(I) = R * COS(TH) * COS(PH)
  64. 640 NEXT
  65. 650 FOR I =  22 TO 28 STEP 2
  66. 660     J = I+1 : GOSUB 1220
  67. 670 NEXT
  68. 680 I = 30 : J = 21 : GOSUB 1220
  69. 690 TH = +(PI#/2 - ICOSA#/2)
  70. 700 FOR I = 31 TO 35
  71. 710     PH = (  0 + (I-31)*72) * PI#/180
  72. 720     X(I) = R * COS(TH) * SIN(PH)
  73. 730     Y(I) = R * SIN(TH)
  74. 740     Z(I) = R * COS(TH) * COS(PH)
  75. 750 NEXT
  76. 760     X(36) = 0
  77. 770     Y(36) = R
  78. 780     Z(36) = 0
  79. 790 OPEN "dome.msh" FOR OUTPUT AS #1
  80. 800 PRINT #1,36
  81. 810 FOR I=1 TO 10
  82. 820     PRINT #1,USING" ### ####.### ####.### ####.###";I,X(I),Y(I),Z(I);
  83. 830     PRINT #1," 0 0 0 1 1 1"
  84. 840 REM PRINT #1,USING" ####.## ";SQR(X(I)^2+Y(I)^2+Z(I)^2)
  85. 850 NEXT
  86. 860 FOR I=11 TO 36
  87. 870     PRINT #1,USING" ### ####.### ####.### ####.###";I,X(I),Y(I),Z(I);
  88. 880     PRINT #1," 1 1 1 1 1 1"
  89. 890 REM PRINT #1,USING" ####.## ";SQR(X(I)^2+Y(I)^2+Z(I)^2)
  90. 900 NEXT
  91. 910 PRINT #1,95
  92. 920 READ IB
  93. 930 IF IB = 0 THEN CLOSE : END
  94. 940 READ IE
  95. 950 IF IE = O GOTO 920
  96. 960 GOSUB 1020
  97. 970     PRINT #1,USING" ### ### # #";IB,IE,1,1;
  98. 980     PRINT #1,USING" ####.# \      \";RA,"DF2X8   "
  99. 990 REM PRINT #1,USING" ####.## ";MEMLEN
  100. 1000 IB = IE
  101. 1010 GOTO 940
  102. 1020 REM subroutine to figure roll angle (RA)
  103. 1030 REM note: there is no provision for vertical members
  104. 1040 REM A1*x + B1*y + C1*z = 0 describes local XY plane in global coordinates
  105. 1050 A1 =   Y(IE)*Z(IB) - Y(IB)*Z(IE)
  106. 1060 B1 =  -X(IE)*Z(IB) + X(IB)*Z(IE)
  107. 1070 C1 =   X(IE)*Y(IB) - X(IB)*Y(IE)
  108. 1080 REM A2*x + B2*y + C2*z = 0 describes vertical plane containing local X axis
  109. 1090 REM                                  in global coordinates
  110. 1100 A2 =  -(Z(IE)-Z(IB))
  111. 1110 B2 =   0
  112. 1120 C2 =   (X(IE)-X(IB))
  113. 1130 REM  RA is roll angle or
  114. 1140 REM angle between local XY plane and vertical plane containing local X axis
  115. 1150 ABC1 = SQR(A1*A1+B1*B1+C1*C1)
  116. 1160 ABC2 = SQR(A2*A2+B2*B2+C2*C2)
  117. 1170 COSRA = (A1*A2+B1*B2+C1*C2)/(ABC1*ABC2)
  118. 1180 IF ABS(COSRA)>.99999 THEN RA=0 ELSE RA = FNACS(COSRA) * 180/PI#
  119. 1190 IF .0005 < B1 THEN RA = RA - 180
  120. 1200 MEMLEN = SQR((X(IE)-X(IB))^2+(Y(IE)-Y(IB))^2+(Z(IE)-Z(IB))^2)
  121. 1210 RETURN
  122. 1220 REM subroutine to move midpoint of icosa-edge to surface of sphere
  123. 1230 XM = (X(I-1)+X(J))/2
  124. 1240 YM = (Y(I-1)+Y(J))/2
  125. 1250 ZM = (Z(I-1)+Z(J))/2
  126. 1260 VECLEN = SQR(XM^2+YM^2+ZM^2)
  127. 1270 X(I) = R * XM/VECLEN
  128. 1280 Y(I) = R * YM/VECLEN
  129. 1290 Z(I) = R * ZM/VECLEN
  130. 1300 RETURN
  131.